home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
HENSA
/
MISC
/
SHELL.ARC
/
Shell
/
Sources
/
c
/
Check
< prev
next >
Wrap
Text File
|
1994-05-17
|
3KB
|
102 lines
#include <limits.h>
#include "DeskLib:WimpSWIs.h"
#include "DeskLib:Coord.h"
#include "Shell.Shell.h"
#include "Shell.Check.h"
BOOL Shell_CheckWindowSizeScroll( window_handle w, const wimp_rect *rect, BOOL bottomscroll)
/* Expands the window to contain the workarea rect if needed. */
/* Returns TRUE if rect is visible. */
/* If bottomscroll is TRUE, the window is scrolled down if already */
/* at bottom of workarea. */
{
window_info info;
BOOL changedsize = FALSE, movescroll = FALSE;
info.window = w;
Wimp_GetWindowInfo( &info);
if (bottomscroll) {
if ( info.block.scroll.y <=
info.block.workarearect.min.y +
(info.block.screenrect.max.y - info.block.screenrect.min.y)
) movescroll = TRUE;
}
if ( rect->min.x-4 < info.block.workarearect.min.x) {
info.block.workarearect.min.x = rect->min.x-4;
changedsize = TRUE;
}
if ( rect->min.y-4 < info.block.workarearect.min.y) {
info.block.workarearect.min.y = rect->min.y-4;
changedsize = TRUE;
}
if ( rect->max.x > info.block.workarearect.max.x) {
info.block.workarearect.max.x = rect->max.x;
changedsize = TRUE;
}
if ( rect->max.y > info.block.workarearect.max.y) {
info.block.workarearect.max.y = rect->max.y;
changedsize = TRUE;
}
if ( changedsize) Wimp_SetExtent( w, &info.block.workarearect);
if ( bottomscroll && movescroll) {
window_state state;
Wimp_GetWindowState( w, &state);
state.openblock.scroll.y = INT_MIN;
Wimp_OpenWindow( (window_openblock *) &state.openblock);
/* still need to redraw if window is scrolled */
}
Coord_RectToWorkArea( &info.block.screenrect, (convert_block *) &info.block);
return Coord_RectsOverlap( (wimp_rect *) rect, &info.block.screenrect);
}
/*
The following define is in "Shell.Check.h"
#define Shell_CheckWindowSize( w, r) Shell_CheckWindowSizeScroll( w, r, FALSE)
*/
void Shell_CheckWindSizeAndRedraw( window_handle window, const wimp_rect *rect)
{
if ( Shell_CheckWindowSize( window, rect)) {
window_redrawblock block;
block.window = window;
block.rect = *rect;
Wimp_ForceRedraw( &block);
}
return;
}
void Shell_CheckWindSizeAndRedrawAndScroll( window_handle window, const wimp_rect *rect)
{
if ( Shell_CheckWindowSizeScroll( window, rect, /* bottom scroll */ TRUE)) {
window_redrawblock block;
block.window = window;
block.rect = *rect;
Wimp_ForceRedraw( &block);
}
return;
}
void Shell_CheckWindSizeAndRedrawSlow( Shell_rectblock *r)
{
if ( Shell_CheckWindowSize( r->window, &r->icon.workarearect)) Shell_ForceRectRedrawSlow( r);
}